Add gtk_list_box_prepend
authorPaolo Borelli <pborelli@gnome.org>
Tue, 6 Aug 2013 12:57:22 +0000 (14:57 +0200)
committerPaolo Borelli <pborelli@gnome.org>
Wed, 7 Aug 2013 08:52:11 +0000 (10:52 +0200)
Add a convenience method for prepending rows to a list box without
having to fiddle with a sort function.

https://bugzilla.gnome.org/show_bug.cgi?id=705558

docs/reference/gtk/gtk3-sections.txt
gtk/gtklistbox.c
gtk/gtklistbox.h

index 886f4d9e2176b1fb53c8f88008d68f3c362291bc..491e1e93a3a737115d528ea3e29f42be2a174c5b 100644 (file)
@@ -510,6 +510,7 @@ GtkListBoxSortFunc
 GtkListBoxUpdateHeaderFunc
 
 gtk_list_box_new
+gtk_list_box_prepend
 gtk_list_box_select_row
 gtk_list_box_get_selected_row
 
index 21fb7c5ec37e60db248e7ffd0cc094c40fe55206..8777ffc4f7f668f9de58564930920bccd5962c79 100644 (file)
@@ -1672,10 +1672,10 @@ gtk_list_box_row_visibility_changed (GtkListBox    *list_box,
 }
 
 static void
-gtk_list_box_real_add (GtkContainer *container,
-                       GtkWidget    *child)
+gtk_list_box_add_row (GtkListBox *list_box,
+                      GtkWidget  *child,
+                      gboolean    prepend)
 {
-  GtkListBox *list_box = GTK_LIST_BOX (container);
   GtkListBoxPrivate *priv = gtk_list_box_get_instance_private (list_box);
   GtkListBoxRow *row;
   GSequenceIter* iter = NULL;
@@ -1692,10 +1692,11 @@ gtk_list_box_real_add (GtkContainer *container,
   if (priv->sort_func != NULL)
     iter = g_sequence_insert_sorted (priv->children, row,
                                      (GCompareDataFunc)do_sort, list_box);
+  else if (prepend)
+    iter = g_sequence_prepend (priv->children, row);
   else
     iter = g_sequence_append (priv->children, row);
 
-
   ROW_PRIV (row)->iter = iter;
   gtk_widget_set_parent (GTK_WIDGET (row), GTK_WIDGET (list_box));
   gtk_widget_set_child_visible (GTK_WIDGET (row), TRUE);
@@ -1711,6 +1712,13 @@ gtk_list_box_real_add (GtkContainer *container,
     }
 }
 
+static void
+gtk_list_box_real_add (GtkContainer *container,
+                       GtkWidget    *child)
+{
+  gtk_list_box_add_row (GTK_LIST_BOX (container), child, FALSE);
+}
+
 static void
 gtk_list_box_real_remove (GtkContainer *container,
                           GtkWidget    *child)
@@ -2046,6 +2054,24 @@ gtk_list_box_real_size_allocate (GtkWidget     *widget,
     }
 }
 
+/**
+ * gtk_list_box_prepend:
+ * @list_box: a #GtkListBox.
+ * @child: the #GtkWidget to add
+ *
+ * Prepend a widget to the list. If a sort function is set, the widget will
+ * actually be inserted at the calculated position and this function has the
+ * same effect of gtk_container_add().
+ *
+ * Since: 3.10
+ */
+void
+gtk_list_box_prepend (GtkListBox *list_box,
+                      GtkWidget  *child)
+{
+  gtk_list_box_add_row (list_box, child, TRUE);
+}
+
 /**
  * gtk_list_box_drag_unhighlight_row:
  * @list_box: An #GtkListBox.
index 161bdb1e8ea2e9e1f01d459e75b07818f3c6fef8..d537d7db78edaba7d4057a6cddc792b9bd52e42d 100644 (file)
@@ -161,6 +161,9 @@ void       gtk_list_box_row_changed       (GtkListBoxRow *row);
 GDK_AVAILABLE_IN_3_10
 GType          gtk_list_box_get_type                     (void) G_GNUC_CONST;
 GDK_AVAILABLE_IN_3_10
+void           gtk_list_box_prepend                      (GtkListBox                    *list_box,
+                                                          GtkWidget                     *child);
+GDK_AVAILABLE_IN_3_10
 GtkListBoxRow* gtk_list_box_get_selected_row             (GtkListBox                    *list_box);
 GDK_AVAILABLE_IN_3_10
 GtkListBoxRow* gtk_list_box_get_row_at_index             (GtkListBox                    *list_box,